/**
 * 权限检查工具
 */

/**
 * 检查用户是否已登录
 * @returns {Boolean} 是否已登录
 */
const isLoggedIn = () => {
  // 检查本地存储中是否有token和用户信息
  const token = wx.getStorageSync('token');
  const userInfo = wx.getStorageSync('userInfo');
  
  // 获取全局应用实例
  const app = getApp();
  
  // 更新全局登录状态
  if (token && userInfo) {
    if (app && !app.globalData.isLogin) {
      app.globalData.isLogin = true;
      app.globalData.userInfo = userInfo;
    }
    return true;
  } else {
    if (app) {
      app.globalData.isLogin = false;
      app.globalData.userInfo = null;
    }
    return false;
  }
};

/**
 * 检查登录状态并根据结果执行相应操作
 * @param {Function} onSuccess 登录成功时的回调函数
 * @param {Boolean} showToast 是否显示提示，默认为true
 * @returns {Boolean} 是否已登录
 */
const checkLoginStatus = (onSuccess, showToast = true) => {
  // 强制重新检查登录状态
  const loginStatus = isLoggedIn();
  
  if (loginStatus) {
    // 已登录，执行成功回调
    if (typeof onSuccess === 'function') {
      onSuccess();
    }
    return true;
  } else {
    // 未登录，提示用户并跳转到登录页面
    if (showToast) {
      wx.showModal({
        title: '提示',
        content: '您需要登录后才能访问此功能',
        confirmText: '去登录',
        cancelText: '取消',
        success: (res) => {
          if (res.confirm) {
            // 用户点击确定，跳转到登录页面
            wx.navigateTo({
              url: '/pages/user/login'
            });
          }
        }
      });
    }
    return false;
  }
};

/**
 * 页面访问权限检查
 * @param {Object} pageObj 页面对象
 * @param {Boolean} needLogin 是否需要登录
 * @returns {Object} 处理后的页面对象
 */
const pagePermission = (pageObj, needLogin = true) => {
  // 保存原始的onLoad方法
  const originalOnLoad = pageObj.onLoad;
  
  // 重写onLoad方法
  pageObj.onLoad = function(options) {
    // 强制重新检查登录状态
    const loginStatus = isLoggedIn();
    
    if (needLogin && !loginStatus) {
      // 需要登录但未登录，显示登录提示
      wx.showModal({
        title: '访问受限',
        content: '您需要登录后才能访问此页面',
        confirmText: '去登录',
        cancelText: '返回',
        success: (res) => {
          if (res.confirm) {
            // 用户点击确定，跳转到登录页面
            wx.navigateTo({
              url: '/pages/user/login'
            });
          } else {
            // 用户点击取消，返回上一页
            wx.navigateBack();
          }
        }
      });
    } else {
      // 不需要登录或已登录，执行原始的onLoad方法
      if (originalOnLoad) {
        originalOnLoad.call(this, options);
      }
    }
  };
  
  // 保存原始的onShow方法
  const originalOnShow = pageObj.onShow;
  
  // 重写onShow方法，确保每次页面显示时都检查登录状态
  pageObj.onShow = function() {
    // 页面显示时重新检查登录状态
    isLoggedIn();
    
    // 执行原始的onShow方法
    if (originalOnShow) {
      originalOnShow.call(this);
    }
  };
  
  return pageObj;
};

module.exports = {
  isLoggedIn,
  checkLoginStatus,
  pagePermission
}; 